/**
 * 有N男M女，有K对关系，若某人被对应关系选中，则成为心动
 * 问心动男、女的期望各是多少
 * 男女显然可以分开计算，其次期望可以由每个人被选中的概率进行计算
 * 假设某个人有p的概率被选中，则他对总期望的贡献就是 p * 1
 * 再然后发现不被选中的概率更容易计算，当所有人都不选时才不被选中，乘起来即可
 */
#include <bits/stdc++.h>
using namespace std;

using Real = long double;
using llt = long long;
using vi = vector<int>;

const Real EPS = 1E-12;
int sgn(Real x){return x >= EPS ? 1 : (x <= -EPS ? -1 : 0);}
bool is0(Real x){return 0 == sgn(x);}

int N, M, K;
vector<vi> GA, GB;
// vi A;
// vi B;

void proc(){
    Real a = 0;
    for(int i=1;i<=N;++i){
        Real t = 1;
        for(auto v : GA[i]){
            auto sz = GB[v].size();
            // assert(sz);
            t = t * (sz - 1.) / sz;
            if(is0(t)) t = 0;
        }
        t = 1 - t;
        if(is0(t)) t = 0;
        assert(t >= 0);
        a += t;
    }
    Real b = 0;
    for(int i=1;i<=M;++i){
        Real t = 1;
        for(auto v : GB[i]){
            auto sz = GA[v].size();
            // assert(sz);
            t = t * (sz - 1.) / sz;
            if(is0(t)) t = 0;
        }
        t = 1 - t;
        if(is0(t)) t = 0;
        b += t;
    }
    cout << "float\n";
    cout << fixed << setprecision(12) << a << " " << b << "\n";
    return;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    // cin >> nofkase;
    while(nofkase--){
        cin >> N >> M >> K;
        // A.assign(N + 1, 0);
        // B.assign(M + 1, 0);
        GA.assign(N + 1, {});
        GB.assign(M + 1, {});
        for(int a,b,i=0;i<K;++i){
            cin >> a >> b;
            // A[a] += 1;
            // A[b] += 1;
            GA[a].push_back(b);
            GB[b].push_back(a);
        }
        proc();      
    }
    return 0;
}